package ec.edu.ups.cidi.siia.plamdep.webcrawler.descarga;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.ArrayList;

import org.htmlparser.parserapplications.StringExtractor;
import org.htmlparser.util.ParserException;

import ec.edu.ups.cidi.siia.plamdep.configuracion.ConfiguracionConexionWeb;
import ec.edu.ups.cidi.siia.plamdep.configuracion.ConfiguracionGlobal;
import ec.edu.ups.cidi.siia.plamdep.utils.Log;
public class DescargarContenido 
{
    private DescargarFuente downloader=new DescargarFuente();
    private HtmlUtils utils=new HtmlUtils();
    String link="";
    String[]tiposDoc={"application/vnd.openxmlformats-officedocument.wordprocessingml.document",
                       "application/msword",
                       "application/pdf" };
    public DescargarContenido(String link)
    {
       this.link=link;
    }
    public String getContenido()
    {
        String tipoContenido=downloader.getTipoContenido(link);
        Log.log(null,Log.MOD_WEBCRAWLER,Log.LEVEL_MSG, DescargarContenido.class,"content tipo:"+tipoContenido);
        if(tipoContenido.trim().startsWith("text/html"))
        {	
        	return this.extraerContenidoPagina();
        }
        else 
            for(String t:tiposDoc)
                if(tipoContenido.matches(t) )
                return this.extraerContenidoDocumento(t);
        return "";
    } 
    private String extraerContenidoPagina()
    {
        try {
            StringExtractor se=new StringExtractor(link);
            return se.extractStrings(false);
            
        } catch (ParserException ex) 
        {  
        	Log.log(ex,Log.MOD_WEBCRAWLER,Log.LEVEL_ERROR, DescargarContenido.class,"Error al extraer Contenido Pagina");
        }
        return "";
    }
    private String extraerContenidoDocumento(String tipo)
    {
        InputStream is =downloader.descargarAsInputStream(link);
        String extencion="pdf";
        if(tipo.equalsIgnoreCase(tiposDoc[0])) extencion="docx";
        else if(tipo.equalsIgnoreCase(tiposDoc[1])) extencion="doc";
        String archivo=ConfiguracionGlobal.pathResources+"/temp/"+ConfiguracionConexionWeb.getSecuencia()+"."+extencion;
        guardarIS(is, archivo);
        return archivo;
    }
    private void guardarIS( InputStream is,String archivo)
    { try {
    			Log.log(null,Log.MOD_WEBCRAWLER,Log.LEVEL_MSG, DescargarContenido.class,"Guardando Archivo:  "+archivo);
    	
                FileOutputStream fos = new FileOutputStream(archivo);
                byte [] array = new byte[1000];
                int leido = is.read(array);
                while (leido > 0) 
                {  fos.write(array,0,leido);
                   leido=is.read(array);
                }
                fos.close();
                is.close();
         } catch (Exception ex) {Log.log(ex,Log.MOD_WEBCRAWLER,Log.LEVEL_ERROR, DescargarContenido.class,"Error al guardar is"); }
    }
    public ArrayList<String> obtenerMetadatos()
    {
    	Log.log(null,Log.MOD_WEBCRAWLER,Log.LEVEL_MSG, DescargarContenido.class,"Obteniendo metadatos");
        String html=downloader.descargarHTML(link,"GET",null);
        utils.SaveFile("temp/meta.html", html, true);
        ArrayList<String> metas=this.utils.obtenerEtiqueta2(html, "<meta","/>", true,0);
        return metas;
    }
}